//
//  TjbShop.swift
//  jhf
//
//  Created by Mac on 2021/09/28 17:00:22.
//  Copyright © 2021 jhf. All rights reserved.
//
import Foundation
import UIKit
import Moya
import CryptoSwift
import SwiftyJSON
import CooperSwift

// LogPlugin(),
// SpinnerPlugin()
// EncryptPlugin()
// RequestAlertPlugin

let TjbShopProvider = MoyaProvider<TjbShop>(plugins: [SpinnerPlugin(), EncryptPlugin(), LogPlugin()])

   
public enum TjbShop {
     // 根据字典类型获取字典数据
     /// type 字典类型 string
     case mobDictGetdictbytype(String)

     // 查看字典类型
     case mobDictGettype

     // 编辑
     /// address 地址 string
     /// auditPassTime 审核通过时间 string
     /// auditStatus 审核状态 1：待审核，2：审核成功，3：审核失败 integer
     /// bankNo 银行卡号 string
     /// bankSite 开户行地址 string
     /// businessTime 营业时间 09:00--18:00 string
     /// businessUrl 营业执照 string
     /// contacts 联系人姓名 string
     /// coverUrl 店铺封面 string
     /// createdTime 创建日期 string
     /// description 描述信息 string
     /// failReasons 审核失败描述 string
     /// id null integer
     /// latitude 维度 number
     /// longitute 经度 number
     /// mainBusiness 主营产品 string
     /// modifiedTime 修改日期 string
     /// name 名称 string
     /// payeeName 收款人姓名 string
     /// sales 销量 integer
     /// status 店铺状态 1：开店，2：关店 integer
     /// tel 电话 string
     /// type 店铺属性 1：铁甲帮认证店，2：应急认证店 string
     /// userId 用户id integer
     /// valid 是否可以 1:可用,0不可用 integer
     case storeMobEdit(Dictionary<String, Any>)

     // 我的店铺
     case storeMobGetmystorelist

     // 附件上传
     /// file file file ❤️
     /// type type string ❤️
     case mobImgUpload(Data, String)

     // 删除
     /// id id integer ❤️
     case mobRemovestorebyid(Int)

     // 重新申请
     /// address 地址 string
     /// auditPassTime 审核通过时间 string
     /// auditStatus 审核状态 1：待审核，2：审核成功，3：审核失败 integer
     /// bankNo 银行卡号 string
     /// bankSite 开户行地址 string
     /// businessTime 营业时间 09:00--18:00 string
     /// businessUrl 营业执照 string
     /// contacts 联系人姓名 string
     /// coverUrl 店铺封面 string
     /// createdTime 创建日期 string
     /// description 描述信息 string
     /// failReasons 审核失败描述 string
     /// id null integer
     /// latitude 维度 number
     /// longitute 经度 number
     /// mainBusiness 主营产品 string
     /// modifiedTime 修改日期 string
     /// name 名称 string
     /// payeeName 收款人姓名 string
     /// sales 销量 integer
     /// status 店铺状态 1：开店，2：关店 integer
     /// tel 电话 string
     /// type 店铺属性 1：铁甲帮认证店，2：应急认证店 string
     /// userId 用户id integer
     /// valid 是否可以 1:可用,0不可用 integer
     case storeMobReplaysave(Dictionary<String, Any>)

     // 入驻商城/添加店铺
     /// address 地址 string
     /// auditPassTime 审核通过时间 string
     /// auditStatus 审核状态 1：待审核，2：审核成功，3：审核失败 integer
     /// bankNo 银行卡号 string
     /// bankSite 开户行地址 string
     /// businessTime 营业时间 09:00--18:00 string
     /// businessUrl 营业执照 string
     /// contacts 联系人姓名 string
     /// coverUrl 店铺封面 string
     /// createdTime 创建日期 string
     /// description 描述信息 string
     /// failReasons 审核失败描述 string
     /// id null integer
     /// latitude 维度 number
     /// longitute 经度 number
     /// mainBusiness 主营产品 string
     /// modifiedTime 修改日期 string
     /// name 名称 string
     /// payeeName 收款人姓名 string
     /// sales 销量 integer
     /// status 店铺状态 1：开店，2：关店 integer
     /// tel 电话 string
     /// type 店铺属性 1：铁甲帮认证店，2：应急认证店 string
     /// userId 用户id integer
     /// valid 是否可以 1:可用,0不可用 integer
     case storeMobSave(Dictionary<String, Any>)

     // 附件上传
     /// file file file ❤️
     case storeMobUpload(Data)

}
    

extension TjbShop: TargetType {
    
    public var method: Moya.Method {
        if ["ecommerce/store/mob/getMyStoreList", "ecommerce/store/mob/removeStoreById/"].contains(self.path) {
            return .get
        }
        return .post
    }
    
    public var sampleData: Data {
        return "{}".data(using: String.Encoding.utf8)!
    }
    
    public var task: Task {
        var params: [String:Any] = [:]
        var formData: [MultipartFormData] = []
        switch self {
            case .mobDictGetdictbytype(let type):
            params["type"] = type
            break
        case .mobDictGettype:
            break
        case .storeMobEdit(let param):
            params = params.add(param)
            break
        case .storeMobGetmystorelist:
            break
        case .mobImgUpload(let file, let type):
            params["type"] = type
            formData.append(MultipartFormData.init(provider: .data(file), name: "file", fileName: nil, mimeType: nil))
            break
        case .mobRemovestorebyid(let id):
            params["id"] = id
            break
        case .storeMobReplaysave(let param):
            params = params.add(param)
            break
        case .storeMobSave(let param):
            params = params.add(param)
            break
        case .storeMobUpload(let file):
            formData.append(MultipartFormData.init(provider: .data(file), name: "file", fileName: nil, mimeType: nil))
            break
        
        }
        if ["ecommerce/store/mob/img/upload", "ecommerce/store/mob/upload"].contains(self.path) {
            return .uploadCompositeMultipart(formData, urlParameters: params)
        }
        return .requestParameters(parameters: params,
                                  encoding: URLEncoding.default)
    }
    
    public var headers: [String : String]? {
        if ["ecommerce/store/mob/img/upload", "ecommerce/store/mob/upload"].contains(self.path) {
            return ["Content-type" : "multipart/form-data"]
        }
        return ["Content-type" : "application/json"]
    }
        
    public var baseURL: URL {
        return URL(string: "http://101.200.47.68:8080/home/interface/")!
    }
    
    public var path: String {
        switch self {
            
          case .mobDictGetdictbytype:
            return "ecommerce/store/mob/dict/getDictByType"
        
          case .mobDictGettype:
            return "ecommerce/store/mob/dict/getType"
        
          case .storeMobEdit:
            return "ecommerce/store/mob/edit"
        
          case .storeMobGetmystorelist:
            return "ecommerce/store/mob/getMyStoreList"
        
          case .mobImgUpload:
            return "ecommerce/store/mob/img/upload"
        
          case .mobRemovestorebyid:
            return "ecommerce/store/mob/removeStoreById/"
        
          case .storeMobReplaysave:
            return "ecommerce/store/mob/replaySave"
        
          case .storeMobSave:
            return "ecommerce/store/mob/save"
        
          case .storeMobUpload:
            return "ecommerce/store/mob/upload"
        }
    }
        
}
